#ifndef _DEBUG_MANAGER_H
#define _DEBUG_MANAGER_H

//调试级别，数值越小越高
#define APP_EMERG   "<0>"   //系统崩溃
#define APP_ALERT   "<1>"   //指令无法立即执行
#define APP_CRLT    "<2>"   //临界条件
#define APP_ERR     "<3>"   //错误情况
#define APP_WARNING "<4>"   //警告情况
#define APP_NOTICE  "<5>"   //普通但是特殊情况
#define APP_INFO    "<6>"   //状态信息
#define APP_DEBUG   "<7>"   //debug等级信息

#define DEFAULT_DBGLEVEL 4  //默认debug水平

typedef struct DebugOpr{
    char* name;
    int isCanUse;
    int (*DebugInit)(void); //调试模块的初始化函数
    int (*DebugExit)(void); //退出函数
    int (*DebugPrint)(char *strData);   //输出
    struct DebugOpr *ptNext;
}T_DebugOpr, *PT_DebugOpr;

//注册调试通道，用ptDebugOpr表示一个调试通道
//返回值：0-成功，其他值-失败
int RegisterDebugOpr(PT_DebugOpr ptDebugOpr);

//显示本程序能支持的调试模块
void ShowDebugOpr(void);

//根据名字取出调试模块
//返回值：NULL-失败，没有指定的模块
//       非NULL-显示模块的PT_DebugOpr结构体指针
PT_DebugOpr GetDebugOpr(char *pcName);

//设置打印级别，级别0-7，只有高于或等于g_iDebugLevelLimit的调试信息才会打印
//返回值：0-成功
int SetDbgLevel(char *strBuf);

//控制调试通道
//输入参数： strBuf
//例如： stdout=0---关闭stdout打印， stdout=1---打开stdout打印
//返回值： 0-成功，-1-失败
int SetDebugChanel(char *strBur);


//注册调试通道，把PT_DebugOpr注册到链表里
int DebugInit(void);

//打印信息的总入口,使用的DBG_PRINTF就是指代这个函数
//返回值： 0-成功， -1-失败
int DebugPrint(const char *pcFormat, ...);

//手动初始化打印调试通道，比如网络打印需要绑定端口
//返回值： 0-成功, 其他值-失败
int InitDebugChanel(void);

//注册标注输出调试通道，把g_tStdoutDbgOpr结构体放到链表里
//返回值： 0-成功, 其他值-失败
int StdoutInit(void);

//注册网络输出调试通道，把g_tStdoutDbgOpr结构体放到链表里
//返回值： 0-成功, 其他值-失败
int NetoutInit(void);

#endif  /* _DEBUG_MANAGER_H */